package com.itheima.xmy.Demo;



import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*某公司组织年会，会议入场时有两个入口 ，在入场时每位员工都能获取一张双色球彩票，
假设公司有100个员工， 利用多线程模拟年会入场过程，并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。
线程运行后打印 格式如下：
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是:[17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是:[06, 11, 14, 22, 29, 32, 15]
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工
训练提示
1、自定义类实现Runnable接口，定义变量int number = 100;模拟100个人。
2、定义测试类，启动两个线程分别模拟：前门、后门。
答案：*/
public class DoorComeIn {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        RoomDoor rd = new RoomDoor();
        FutureTask ft = new FutureTask(() -> {
            int a = 0;
            {
                while (true) {
                    if (rd.call() == 1) {
                        a++;
                    } else {
                        break;
                    }
                }
            }
            return a;
        }
        );
        FutureTask ft1 = new FutureTask(() -> {
            int a = 0;
            {
                while (true) {
                    if (rd.call() == 1) {
                        a++;
                    } else {
                        break;
                    }
                }
            }
            return a;
        }
        );

        Thread t1 = new Thread(ft, "后门");
        Thread t2 = new Thread(ft1, "前门");
        t1.start();
        t2.start();
        System.out.println("从"+t1.getName()+"进入的有"+ft.get()+"人");
        System.out.println("从"+t2.getName()+"进入的有"+ft1.get()+"人");

    }
}


class RoomDoor implements Callable<Integer> {
    int number = 100;


    @Override
    public Integer call() throws Exception {
        if (number > 0) {
            System.out.println("编号为：" + (100 - (--number)) + "的员工从" +
                    Thread.currentThread().getName() + "入场，拿到的双色球彩票号码是:" + DoubleColorBall.create());
        } else {
            return -1;
        }
        return 1;

    }
}